package com.bjsxt.userscenter.springmvc.controller;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSONObject;
import com.bjsxt.userscenter.common.controller.BaseController;
import com.bjsxt.userscenter.common.util.ConstatFinalUtil;
import com.bjsxt.userscenter.common.util.EncryptUtil;
import com.bjsxt.userscenter.common.util.PageInfoUtil;
import com.bjsxt.userscenter.users.pojo.AAdmins;
import com.bjsxt.userscenter.users.pojo.ARole;
import com.bjsxt.userscenter.users.service.IUsersService;

@Controller
@RequestMapping("/back/admins/")
public class AdminsBackController extends BaseController
{
	@Resource
	private IUsersService usersService;
	
	/*
	 * 退出登录（发生在登陆页面之后）
	 * 1：准备一个controller，不用准备页面
	 */
	@RequestMapping("/loginOut")
	public String loginOut(HttpSession session)
	{
		/*退出登录的时候要跳转到另一个页面上
		 * 当退出的时候一定要把session作用域取消掉		 */
		ConstatFinalUtil.SYS_LOGGER.info("===loginOut===");
		session.removeAttribute("admins");
		session.removeAttribute("lastLoginTime");
		/*一定要注意login.htm前面的/，他表示是根目录		 */
		return "redirect:/login.htm";
	}
	
	/*
	 * 用户设置与系统设置菜单（登陆后左侧的页面）
	 * 点击用户与系统管理的时候，左侧的菜单要跳转到不同的页面，显示不同的结果
	 * 准备一个controller,同时准备一个jsp
	 * 为了在jsp中区分是用户设置还是系统设置，需要传递一个参数进行区分
	 * 区分的时候用到的一个功能是${param.operType } param.参数名,
	 * j-ui中可以主要是利用return请求转发去掉用资源，只需要在页面的上部设置一个controller地址即可 */
	@RequestMapping("/leftMenu")
	public String leftMenu()
	{
		ConstatFinalUtil.SYS_LOGGER.info("===leftMenu===");
		
		return "/back/admins/leftMenu";
	}
	
	/**
	 * 管理员操作开始
	 */
	/*查询管理员列表
	 * 1：准备一个controller去查询所有的管理员
	 * 2：准备一个jsp页面去展示所有的管理员（管理员不能出现）
	 * 3：套页面首先找到jsp页面，套进去。然后找到修改路径，不能出现404错误，填空题	 */
	@RequestMapping("adminsList")
	public String adminsList(String keyword,String status,String st,String ed,
			Model model,String currentPage,String pageSize)
	{
		ConstatFinalUtil.SYS_LOGGER.info("===adminsList===");
		/* 将字符串变成时间
		 * */
		if(st == null)
		{
			st = "" ; 
		}
		if(ed == null)
		{
			ed = "" ; 
		}
		if(status == null)
		{
			status = "" ; 
		}
		
		/* 搜索条件 */
		Map<String, Object> condMap = new HashMap<String, Object>();
		condMap.put("keyword", keyword);
		if(!"".equalsIgnoreCase(status))
		{
			condMap.put("status", status);
		}
		
		Date stDate = null ; 
		Date edDate = null ;
		if(!"".equalsIgnoreCase(st) && !"".equalsIgnoreCase(ed))
		{
			/*将字符串转换成日期
			 * 
			 * 完善了DateFormatUtil
			 * */
			stDate = this.dateFormatUtil.strDateTime(st); 
			edDate = this.dateFormatUtil.strDateTime(ed); ; 
		}
		condMap.put("stDate", stDate);
		condMap.put("edDate", edDate);
		
		PageInfoUtil pageInfoUtil = proccedPageInfo(currentPage, pageSize);
		
		/* 查询结果 */
		Map resultMap = this.usersService.findCondListAdminsService(pageInfoUtil,condMap);
		/*通过map得到管理员的集合，取出来之后放到作用域中		 */
		List<AAdmins> adminsList = (List<AAdmins>) resultMap.get("list");
		pageInfoUtil = (PageInfoUtil) resultMap.get("pageInfoUtil");
		/* 将结果放到四大作用域中 */
		model.addAttribute("adminsList", adminsList);
		model.addAttribute("pageInfoUtil", pageInfoUtil);
		/*RpcContext rpcContext = RpcContext.getContext() ; 
		System.out.println(rpcContext.get("totalRecord") + "--" + rpcContext.getAttachment("totalRecord"));*/
		
		/* 将查询条件放到request中 */
		model.addAttribute("keyword", keyword);
		model.addAttribute("status", status);
		model.addAttribute("st", st);
		model.addAttribute("ed", ed);
		return "/back/admins/adminsList";
	}
	/*管理员添加
	 * 1：准备两个controller，一个用来点击后查询启用的角色信息并跳转到添加页面
	 * 另一个用来做表格的提交，跳转到adminsList页面
	 * 2：准备一个jsp页面，用来展示用户
	 * 3：套页面首先找到jsp页面，套进去。然后找到修改路径，不能出现404错误，填空题	 */
	@RequestMapping("/adminsInsert")
	public String adminsInsert(Model model)
	{
		ConstatFinalUtil.SYS_LOGGER.info("===adminsInsert===");
		Map<String,Object> map=new HashMap<String,Object>();
		map.put("status", "1");
		List<ARole> roleList=this.usersService.findCondListRoleService(null, map);
		model.addAttribute("roleList",roleList);
		
		return "/back/admins/adminsInsert";
	}
	/*管理员提交操作
	 * 需要注意的是：根据页面的表格显示，通过网络---HTML---找到发送的链接地址---查看发送信息的格式即可
	 * 通过RequestMapping可以将返回到页面的信息进行编译
	 * ResponseBody表示将信息带入到将要跳转后的页面进行展示*/
	@RequestMapping(value="/adminsInsertSubmit",produces="text/html;charset=UTF-8")
	@ResponseBody
	public String adminsInsertSubmit(HttpServletRequest request,AAdmins admins)
	{
		ConstatFinalUtil.SYS_LOGGER.info("===adminsInsertSubmit===");
		/*密码加密,将encodeStr放在BaseController中，并且进行spring扫描，自动创建实例
		 * 再通过实例调用方法进行加密		 */
		admins.setPassword(this.encryptUtil.encodeStr(admins.getPassword()));
		/*将admins中的时间进行更新，设置为当前时间		 */
		admins.setCreateTime(new Date());
		admins.setUpdateTime(new Date());
		admins.setLastLoginTime(new Date());
		JSONObject resDbJSON=this.usersService.saveOneAdminsService(admins);
		/*这一步可以将resDbJSON转化为String类型*/
		/* 结果 */
		this.info = resDbJSON.get("info") + "" ; 
		JSONObject resultJSON = printJuiJson(request,info);
		
		return resultJSON.toJSONString();
	}

	
	/**
	 * 管理员操作结束
	 */
	
}
